"""
# -*- coding: utf-8 -*-
# @Time    : 2023/6/14 11:22
# @Author  : 王摇摆
# @FileName: CSV.py
# @Software: PyCharm
# @Blog    ：https://blog.csdn.net/weixin_44943389?type=blog
"""
# 皮马印第安人糖尿病数据集 包含很多字段：怀孕次数 口服葡萄糖耐量试验中血浆葡萄糖浓度 舒张压(mm Hg) 三头肌组织褶厚度(mm)
# 2小时血清胰岛素(μU/ ml) 体重指数(kg/(身高(m)^2) 糖尿病系统功能 年龄(岁)
import pandas as pd
import xgboost as xgb
from sklearn.model_selection import train_test_split

data = pd.read_csv('../data/pima-indians-diabetes.csv')
print('1. 数据集加载成功')

# 做数据切分
train, test = train_test_split(data)
# 转换成Dmatrix格式
feature_columns = ['Pregnancies', 'Glucose', 'BloodPressure', 'SkinThickness', 'Insulin', 'BMI',
                   'DiabetesPedigreeFunction', 'Age']
target_column = 'Outcome'
# 取出Dataframe的numpy数组值去初始化DMatrix对象
xgtrain = xgb.DMatrix(train[feature_columns].values, train[target_column].values)
xgtest = xgb.DMatrix(test[feature_columns].values, test[target_column].values)
print('2. 数据集预处理完成')

# 参数设定
param = {'max_depth': 5, 'eta': 0.1,  'subsample': 0.7, 'colsample_bytree': 0.7,
         'objective': 'binary:logistic','eval_metric': 'error'}
# 设定watchlist用于查看模型状态
watchlist = [(xgtest, 'eval'), (xgtrain, 'train')]
num_round = 10
print('3. 模型构造完成')

print('4. 模型训练完成')
print('===============训练过程如下=================')
bst = xgb.train(param, xgtrain, num_round, watchlist)

# 使用模型预测
preds = bst.predict(xgtest)
print('5. 模型推理完成')
# 判断准确率
labels = xgtest.get_label()
error_rate = (sum(1 for i in range(len(preds)) if int(preds[i] > 0.5) != labels[i]) / float(len(preds))) * 100
print('错误率为%.2f%%' % error_rate)

# 模型存储
bst.save_model('./model/0002.model')
print('6. 模型存储完成')

